package com.powerteam.mapper.masterData;

import com.powerteam.model.masterData.OrgUnit;
import com.powerteam.model.masterData.OrgUnitUser;
import com.powerteam.model.sys.User;
import com.powerteam.vo.masterData.QueryOrgUnitUserVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 组织架构表相关的操作
 *
 * @author jinming.zhang
 * @version 0.0.1
 * @date 2021/12/30
 */
@Mapper
public interface OrgUnitMapper {


    /**
     * 查询下级列表
     *
     * @param userId
     * @return List<Integer>
     * @Author jinming.zhang
     * @Date 2022/1/7
     */
    List<Integer> findSubordinate(Integer userId);

    /**
     * 查找所有组织单位
     *
     * @param
     * @return List<OrgUnit>
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    List<OrgUnit> findAllOrgUnit();

    /**
     * 查询是否存在根组织
     *
     * @param
     * @return boolean
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    boolean existRootOrgUnit();

    /**
     * 查找最大组织索引
     *
     * @param
     * @return Integer
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    Integer findMaxOrgIndex();

    /**
     * 添加组织架构信息
     *
     * @param orgUnit
     * @return int
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    int insert(OrgUnit orgUnit);

    /**
     * 修改组织架构信息
     *
     * @param orgUnit
     * @return int
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    int update(OrgUnit orgUnit);

    /**
     * 删除组织架构信息
     *
     * @param orgUnitId
     * @return int
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    int deleteWithChildren(Integer orgUnitId);

    /**
     * 根据Id查找组织架构
     *
     * @param orgUnitId
     * @return OrgUnit
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    OrgUnit findById(Integer orgUnitId);

    /**
     * 查找上一个组织架构
     *
     * @param orgUnitId
     * @return OrgUnit
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    OrgUnit findPreviousUnit(Integer orgUnitId);

    /**
     * 查找下一个组织架构
     *
     * @param orgUnitId
     * @return OrgUnit
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    OrgUnit findNextUnit(Integer orgUnitId);

    /**
     * 分页查找不在该组织单位中的用户
     *
     * @param vo
     * @return List<User>
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    List<User> findUserNotInOrgUnit(QueryOrgUnitUserVO vo);

    /**
     * 分页查找该组织单位中的用户
     *
     * @param vo
     * @return List<User>
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    List<OrgUnitUser> findUserInOrgUnit(QueryOrgUnitUserVO vo);

    /**
     * 将用户添加到组织单位
     *
     * @param orgUnitUser
     * @return int
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    int insertOrgUnitUser(OrgUnitUser orgUnitUser);

    /**
     * 将用户从该组织单位移除
     *
     * @param orgUnitUser
     * @return int
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    int deleteOrgUnitUser(OrgUnitUser orgUnitUser);

    /**
     * 将用户设置为主管
     *
     * @param orgUnitUser
     * @return int
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    int setUnitHead(OrgUnitUser orgUnitUser);

    /**
     * 将用户取消主管
     *
     * @param orgUnitUser
     * @return int
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    int removeUnitHead(OrgUnitUser orgUnitUser);

    /**
     * 根据orgUnitId查找下级组织
     *
     * @param orgUnitId
     * @return OrgUnit
     * @Author jinming.zhang
     * @Date 2022/1/10
     */
    OrgUnit existChildren(Integer orgUnitId);
}
